package com.solming.leetcode.question;

//189. 旋转数组
//给定一个数组，将数组中的元素向右移动k个位置，其中k是非负数。
//
//
//
//进阶：
//
//尽可能想出更多的解决方案，至少有三种不同的方法可以解决这个问题。
//你可以使用空间复杂度为O(1) 的原地算法解决这个问题吗？
//
//来源：力扣（LeetCode）
//链接：https://leetcode-cn.com/problems/rotate-array
//输入: nums = [1,2,3,4,5,6,7], k = 3
//输出: [5,6,7,1,2,3,4]
//解释:
//向右旋转 1 步: [7,1,2,3,4,5,6]
//向右旋转 2 步: [6,7,1,2,3,4,5]
//向右旋转 3 步: [5,6,7,1,2,3,4]
//
//来源：力扣（LeetCode）
//链接：https://leetcode-cn.com/problems/rotate-array
//著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
public class Rotate189 {


    //数组翻转的方式
    //len = 6
    // 1、2、3、4、5、6
    //6、5、4、3、2、1
    //0 -> (k-1) 进行翻转  6、5、4 ---> 4、5、6
    //len-k -> len-1 进行翻转 4、3、2、1 ----->1、2、3、4
    public static void rotate1(int[] nums, int k) {
        int len = nums.length;
        if (k==0){
            return ;
        }
        k = k%len;
        reverse(nums,0,len-1);
        reverse(nums,0,k-1);
        reverse(nums,k,len-1);
    }

    public static void reverse(int [] nums,int start ,int end){
        while(start<end){
            int temp = nums[start];
            nums[ start++] = nums[end];
            nums[end--] = temp;
        }
    }

    public static  int getSlow( int len ,int k,int i){
//        int slow = (len - k + i) / len>0?getSlow(len,k,(len - k + i) % len):(len - k + i) % len;
        int slow = (len  -k-k + i) / len>0?
                (i-k+len)%7
        :(len - k + i) % len;
        return slow;
    }

    public static void main(String[] args) {
        int[] arr = new int[]{1,2,3,4,5,6};
        int k = 4;
        rotate1(arr,k);
    }
}
